home *** CD-ROM | disk | FTP | other *** search
- rollout PhysicsRollOut "Physics" rolledUp:true (
- local _name
- local _RollOut
-
- ---------------------------------------------------------------
- -- init GUI
- ---------------------------------------------------------------
- include "$scripts\\pteroTools\\_propGroupUI.ms"
- spinner spnWeight "Weight:" range:[0, 65535, 0] type:#float FieldWidth:50 offset:[-20,0] align:#right
- spinner spnDensity "Density:" range:[0, 65535, 0] type:#float FieldWidth:50 offset:[-20,0] align:#right
- spinner spnInertia "MoI:" range:[0, 65535, 0] type:#float FieldWidth:50 offset:[-20,0] align:#right
- checkbox cbxDefMoi "Default Moment of Inertia" align:#left
- dropdownlist drpStatus "Type:" width:144 height:7 align:#center
-
- ---------------------------------------------------------------
- -- Init RollOut
- ---------------------------------------------------------------
- fn fnKeyNames = #( "Phy_weight", "Phy_density", "Phy_moment", "Phy_status" )
- fn fnKeyUI = #( #( spnWeight ), #( spnDensity ), #( spnInertia ), #( drpStatus ) )
- fn fnKeyDef = #( #( 0 ), #( 0 ), #( 0 ), #( -1 ) )
- fn fnName = "Physics"
- fn fnRollOut = PhysicsRollOut
- fn fnInitRollOut = (
- local _name = fnName()
- local _RollOut = fnRollOut()
- fnAppendRollOut _RollOut _name
- )
-
- ---------------------------------------------------------------
- -- fnApply()
- ---------------------------------------------------------------
- fn fnApply obj keyIDX read write del acq acqObj def sav = (
- local keyNames = fnKeyNames()
- local keyUI = fnKeyUI()
- local keyDef = fnKeyDef()
- local keyArray = #()
-
- fn fnFindMat val keyUI:keyUI keyIDX:keyIDX = ---- FN FIND MATERIAL
- for n = 1 to (keyUI[keyIDX][1].items).count do
- if (subString keyUI[keyIDX][1].items[n] 1 2) == val do return n
-
- if sav do ---- SAVE DEFAULT
- try (
- if keyIDX <= 3 do keyDef[keyIDX][1] = keyUI[keyIDX][1].value
- if keyIDX == 4 do keyDef[keyIDX][1] = keyUI[keyIDX][1].selection - 2
- fnSetDefs ( keyNames[keyIDX] as string ) ( keyDef[keyIDX] as string )
- return true
- ) catch ( print ( "Error: " + _name + ".fnApply() - save" ); return false )
-
- if del do fnDeleteProp obj keyNames[keyIDX] ---- DELETE
-
- keyArray = if acq then fnReadProp acqObj keyNames[keyIDX] else fnReadProp obj keyNames[keyIDX] ---- ACQUIRE
-
- if read or del or def or acq do ( ---- READ
- if ( keyArray[_firstValue] == "" ) or ( keyArray[_firstValue] as string == "undefined" ) or def then
- try (
- if def then keyDef[keyIDX] = fnGetDefs keyNames[keyIDX]
- if keyIDX <= 3 do keyUI[keyIDX][1].value = keyDef[keyIDX][1]
- if keyIDX == 4 do keyUI[keyIDX][1].selection = keyDef[keyIDX][1] + 2
- ) catch ( print ( "Error: " + _name + ".fnApply() - read - default" ); return false )
- else
- try (
- if keyIDX <= 3 do keyUI[keyIDX][1].value = keyArray[_firstValue] as float
- if keyIDX == 4 do keyUI[keyIDX][1].selection = keyArray[_firstValue] as integer + 2
- ) catch ( print ( "Error: " + _name + ".fnApply() - read - properties" ); return false )
- cbxDefMoi.checked = if ( spnWeight.value * 2 ) == spnInertia.value then true else false
- spnInertia.enabled = not cbxDefMoi.checked
-
- if read or del do return true
- )
-
- if write do ---- WRITE
- try (
- keyArray[_keyName] = keyNames[keyIDX]
- if keyIDX <= 3 do if keyUI[keyIDX][1].value == 0 then del = true else keyArray[_firstValue] = keyUI[keyIDX][1].value as string
- if keyIDX == 4 do if keyUI[keyIDX][1].selection == 1 then del = true else keyArray[_firstValue] = ( keyUI[keyIDX][1].selection - 2 ) as string
-
- if del then fnDeleteProp obj keyNames[keyIDX] else fnWriteprop obj keyArray
- return true
- ) catch ( print ( "Error: " + _name + ".fnApply() - write" ); return false )
- )
-
- ---------------------------------------------------------------
- -- fnUpdate()
- ---------------------------------------------------------------
- fn fnUpdate keyIDX:1 read:false write:false del:false acq:false acqObj:undefined def:false sav:false = (
- if not write do write = btnAuto.checked
- for obj in selection do fnApply obj keyIDX read write del acq acqObj def sav
- )
-
- ---------------------------------------------------------------
- -- fnWeight()
- ---------------------------------------------------------------
- fn fnWeight value = (
- if cbxDefMoi.checked do (
- spnInertia.value = spnWeight.value * 2
- fnUpdate keyIDX:3
- )
- fnUpdate keyIDX:1
- )
-
- ---------------------------------------------------------------
- -- fnDefMoi()
- ---------------------------------------------------------------
- fn fnDefMoi state = (
- spnInertia.enabled = not state
- spnInertia.value = spnWeight.value * 2
- fnUpdate keyIDX:3
- )
-
- ---------------------------------------------------------------
- -- Event Handler
- ---------------------------------------------------------------
- on spnWeight changed value do ( fnWeight value; fnGetPropsToShow(); fnPrintLabel() )
- on spnDensity changed value do ( fnUpdate keyIDX:2; fnGetPropsToShow(); fnPrintLabel() )
- on spnInertia changed value do ( fnUpdate keyIDX:3 del:(if value > 0 then false else true); fnGetPropsToShow(); fnPrintLabel() )
- on cbxDefMoi changed state do ( fnDefMoi state; fnGetPropsToShow(); fnPrintLabel() )
- on drpStatus selected item do ( fnUpdate keyIDX:4; fnGetPropsToShow(); fnPrintLabel() )
- on btnSet pressed do ( for n = 1 to (fnKeyNames()).count do fnUpdate keyIDX:n write:true; fnGetPropsToShow(); fnPrintLabel() )
- on btnDef pressed do ( for n = 1 to (fnKeyNames()).count do fnUpdate keyIDX:n def:true; fnGetPropsToShow(); fnPrintLabel() )
- on btnSav pressed do ( for n = 1 to (fnKeyNames()).count do fnUpdate keyIDX:n sav:true; fnGetPropsToShow(); fnPrintLabel() )
- on btnDel pressed do ( for n = 1 to (fnKeyNames()).count do fnUpdate keyIDX:n del:true; fnGetPropsToShow(); fnPrintLabel() )
- on btnAcq changed state do ( fnAcquire _RollOut keys:(fnKeyNames()).count; fnGetPropsToShow(); fnPrintLabel() )
- on PhysicsRollOut open do (
- _RollOut = fnRollOut()
- _name = fnName()
- -- TODO: zjistit jak to je doopravdy s 'Trash' Status
- drpStatus.items = #("- None -", "+ Collision, - Synchronize", "+ Collision, + Synchronize", "Trash, + Collide w/t Player/AI", "Trash, - Collide P/AI, - Synch.")
- fnOpenRollOut _RollOut keys:(fnKeyNames()).count
- )
- on PhysicsRollOut close do fnCloseRollOut _RollOut
- )
-